package com.woniuxy.service.impl;

import com.woniuxy.dao.VenueDao;
import com.woniuxy.entity.*;
import com.woniuxy.service.VenueService;
import com.woniuxy.utils.CodeUtils;
import com.woniuxy.utils.LoginRegister;
import com.woniuxy.utils.SignInWay;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
@Transactional
@Data
@Service
public class VenueServiceImpl implements VenueService {
    @Autowired
    private VenueDao venueDao;

    /**
     *注册时使用
     *     接收controller校验过的参数，判断场馆用户名存不存在，如果存在返回常量ACCOUNT_EXIST，不存在则成功添加，返回SUCCESS
     * @param venue 场馆实例
     * @param way 注册方式
     * @return 用户名存在返回ACCOUNT_EXIST，添加成功返回REGISTER_SUCCESS,其他错误返回REGISTER_ERROR
     */
    @Override
    public int addVenue(Venue venue,int way){
        switch(way){
            //用户名注册
            case SignInWay.ACCOUNT :
                //判断该场馆用户名是否存在
                if (findVenueByVname(venue.getVname())!=null){
                    return LoginRegister.ACCOUNT_EXIST;
                }
                break;
            //手机号注册
            case SignInWay.PHONE:
                //查找该手机号是否已经被注册过了
                if (findVenueByPhoneNumber(venue.getPhoneNumber())!=null){
                    return LoginRegister.PHONE_EXIST;
                }
                break;
            case SignInWay.QQ:
                //查看该QQ号是否已经注册了
                if (findVenueByQQ(venue.getQq())!=null){
                    return LoginRegister.QQ_EXIST;
                }
        }
        return venueDao.addVenue(venue)==1?LoginRegister.REGISTER_SUCCESS : LoginRegister.REGISTER_ERROR;

    }

    /**
     * 场馆登录
     * @param venue  场馆实例
     * @param way  登录方式
     * @return  用户名不存在返回ACCOUNT_NOT_EXIST，添加成功返回REGISTER_SUCCESS,其他错误返回REGISTER_ERROR
     */
    @Override
    public int venueLogin(Venue venue,int way){
        switch(way){
            //用户名登录
            case SignInWay.ACCOUNT :
                //判断该场馆用户名是否存在
                Venue venueByVname = findVenueByVname(venue.getVname());
                if (venueByVname!=null){
                    if (venueByVname.getPwd().equals(venue.getPwd())){//密码是否相等
                        return LoginRegister.LOGIN_SUCCESS;
                    }else {//密码错误
                        return LoginRegister.PASSWORD_ERROR;
                    }
                }else {//用户名不存在
                    return LoginRegister.ACCOUNT_NOT_EXIST;
                }
                //手机号登录
            case SignInWay.PHONE:
                Venue venueByPhoneNumber = findVenueByPhoneNumber(venue.getPhoneNumber());
                //查找该手机号是否存在
                if (venueByPhoneNumber!=null){
                    return LoginRegister.LOGIN_SUCCESS;
                }else {//手机号不存在
                    return LoginRegister.PHONE_NOT_EXIST;
                }
                //QQ号登录
            case SignInWay.QQ:
                Venue venueByQQ = findVenueByQQ(venue.getQq());
                if (venueByQQ!=null){
                    if (venueByQQ.getPwd().equals(venue.getPwd())){
                        return LoginRegister.LOGIN_SUCCESS;
                    }else {
                        return LoginRegister.PASSWORD_ERROR;
                    }
                }else {
                    return LoginRegister.QQ_NOT_EXIST;
                }

        }//switch end

        return LoginRegister.LOGIN_ERROR;
    }

    /**
     * 查找该手机号的场馆
     * @param phoneNumber 手机号
     * @return 找到了返回具体的场馆实例，找不到返回null
     */
    @Override
    public Venue findVenueByPhoneNumber(String phoneNumber) {
        return venueDao.findVenueByPhoneNumber(phoneNumber);
    }


    /**
     * 根据场馆id查询
     * @param vid 场馆id
     * @return 返回null或，venue实例
     */
    @Override
    public Venue findVenueByVenueId(int vid) {
        return venueDao.findVenueByVenueId(vid);
    }

//    /**
//     * 根据vid查询是否是他的手机号，然后发送验证码是否匹配
//     * @param vid 场馆id
//     * @param phoneNumber 手机号
//     * @param captcha 验证码
//     * @return int
//     */
//    @Override
//    public int checkInfo(int vid, String phoneNumber, String captcha) {
//        Venue venueByVenueId = venueDao.findVenueByVenueId(vid);
//        if (venueByVenueId==null){
//            return LoginRegister.VENUE_NOT_EXIST;
//        }
//        if (!venueByVenueId.getPhoneNumber().equals(phoneNumber)){
//            return LoginRegister.PHONE_NOT_EXIST;
//        }
//        return LoginRegister.CAPTCHA_ERROR;
//    }

    /**
     * 该场馆忘记密码，需要重置密码
     * @param venue 使用vid和pwd
     * @return int
     */
    @Override
    public int updatePasswordByVenueId(Venue venue) {
        int i = venueDao.updatePasswordByVenueId(venue);
        if (i>0){
            return LoginRegister.OPERATION_SUCCESS;
        }
        return LoginRegister.OPERATION_FAILED;
    }


    /**
     * 查询所有的场馆的分页结果
     * @return 场馆list
     */
    @Override
    public List<Venue> findAllVenues(Venue venue) {
        return venueDao.findAllVenues(venue);
    }

    /**
     * 查询所有的场馆
     * @return 场馆list
     */
    @Override
    public List<Venue> selectAllVenues() {
        return venueDao.selectAllVenues();
    }

    /**
     * 完善注册场馆的信息
     * @param venue 场馆实例
     * @return int
     */
    @Override
    public int completeInfo(Venue venue) {
        int i = venueDao.completeInfo(venue);
        if (i>0){
            return LoginRegister.OPERATION_SUCCESS;
        }
        return LoginRegister.OPERATION_FAILED;
    }

    /**
     * 完善图片
     * @param venue 存放图片
     * @return int
     */
    @Override
    public int updateImage(Venue venue) {
        int i = venueDao.updateImage(venue);
        if (i>0){
            return LoginRegister.OPERATION_SUCCESS;
        }
        return LoginRegister.OPERATION_FAILED;
    }

    /**
     * 通过QQ号查找场馆
     * @param qq QQ号
     * @return venue
     */
    @Override
    public Venue findVenueByQQ(String qq) {
        return venueDao.findVenueByQQ(qq);
    }

    /**
     * 修改完善地址信息
     * @param venue 封装的地址信息
     * @return int
     */
    @Override
    public int updateAddressByVenue(Venue venue) {
        int i = venueDao.updateAddressByVenue(venue);
        if (i>0){
            return LoginRegister.OPERATION_SUCCESS;
        }
        return LoginRegister.OPERATION_FAILED;
    }

    /**
     * 修改场馆手机号
     * @param venue 场馆实例
     * @return int
     */
    @Override
    public int updatePhoneNumberByVenue(Venue venue) {
        int i = venueDao.updatePhoneNumberByVenue(venue);
        if (i>0){
            return LoginRegister.OPERATION_SUCCESS;
        }
        return LoginRegister.OPERATION_FAILED;
    }


    /**
     *
     * 查找该用户名的场馆
     * @param vname 场馆用户名
     * @return 失败：null，成功：Venue
     */
    @Override
    public Venue findVenueByVname(String vname) {
        return venueDao.findVenueByVname(vname);
    }

    //查看签约教练
    @Override
    public PageBean<Signing> getCoachByPage(int page, int vid) {
        PageBean<Signing> pageBean = new PageBean<Signing>();
        int index = (page - 1) * 8;
        List<Signing> data = venueDao.getCoachByPage(index, 8, vid);
        // int total =coachDao.getNums();
        // System.out.println(total);
        int totalNum =venueDao.getCountOfCoach(vid);
        pageBean.setData(data);
        pageBean.setTotalNum(totalNum);
        pageBean.setTotalPage(totalNum % 8 == 0 ? totalNum / 8 : totalNum / 8 + 1);
        pageBean.setNumsOfCurrPage(data.size());
        pageBean.setPage(page);
        pageBean.setPageSize(8);
        return pageBean;
    }

    //解约教练
    @Override
    public int cancelCoach(int vid, int cid) {
        venueDao.cancelCoach(vid, cid);
        return 1;
    }

    //签约教练
    @Override
    public int insertCoach(Signing signing) {
        venueDao.insertCoach(signing);
        return 1;
    }


}